package com.yeung.mapper.annotation;

import com.yeung.bean.Employee;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.ResultMap;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

/**
 * 以接口的形式封装映射关系
 */

public interface EmployeeMapperAnnotation {
    //是什么类型的操作就加什么注解
    @Select("select * from tbl_employee where id=#{id}")
    public Employee getEmpByid(Integer id);

    /**
     * 当有多个参数的时候, mybatis 会做特殊处理, 将参数封装成一个map
     * 默认key是 :0, 1, ...N, 或者param1, param2, ..., paramn 当量大的时候不方便阅读,理解
     * 所以建议使用@Param 注解告诉mybatis ,将参数的key指定封装
     * 如:@Param("id") Integer id  =>  将以key->id, value->id的实际值
     * 获取参数的值的时候使用${id} 即可
     * <p>
     * 如果需要传多个参数, 且还不是业务参数(对象), 则可以直接传入一个map, 自定义的键值对, 同样使用${key}进行取值
     *
     * @param id
     * @param name
     * @return
     */
    @Select("select * from tbl_employee where id=#{id} and lastName=#{name}")
    public Employee getEmpById_Name(@Param("id") Integer id, @Param("lastName") String name);

    @Select("select * from tbl_employee where id=#{id} and lastName=#{name}")
    public Employee getEmpByMap(Map<String, Object> params);

    /**
     * 将结果封装成一个map集合
     * key的MapKey注解指定的key->id
     * value就是查到的每条记录的封装对象
     *
     * @param id
     * @return
     */
    @MapKey("id")
    @Select("select * from tbl_employee where id=#{id}")
    public Map<String, Employee> empList(@Param("id") Integer id);

    @Select("select * from tbl_employee where department=#{id}")
    List<Employee> getEmpsByDeptId(Integer id);
}
